Chapter 9: Exercises

選擇題


簡答題

  1. 請列舉兩項使用 cookie 的相關應用。
  2. 請列舉兩項使用 cookie 的好處。
  3. 請列舉兩項使用 cookie 的壞處。
  4. 我們可以使用 navigator 物件的哪一個性質來檢查用戶端瀏覽器的 cookie 是否已經啟動?
  5. 我們可以使用 document 物件的哪一個性質來列出此網頁的所有 cookie?
  6. 為避開空格或其他可能造成錯誤之字元,在存取 cookie 的 name 或 value 時,最好使用哪兩個函數來進行編碼與解碼,以便避掉具有特殊意義的字元?
  7. 若使用 escape() 來對中文進行編碼,其機制為何?
  8. 若沒有設定 cookie 的失效日期,cookie 可以存在多久?
  9. 若要使 cookie 能維持長久的效力,而不隨瀏覽器的關閉而消失,請問我們必須進行什麼動作?
  10. 請說明 cookie 在 request 和 response 時的傳送過程。

程式題

請使用本章所學到的 Cookie 技巧來完成下列作業。請特別注意,在測試含有 Cookie 讀寫的網頁時,一定要將網頁放在遠端的伺服器來測試,如果僅是點選硬碟中的網頁檔案,或是經由 localhost (127.0.0.1) 來載入網頁,都有可能得到錯誤的結果。
  1. (*) Cookie檔案在哪裡: 在關閉瀏覽器後,範例「利用 Cookie 記錄客戶拜訪網頁次數」(cookie04.htm)的 Cookie 是寫到你的硬碟下的哪一個檔案?你如何尋找到此檔案?Cookie 在此檔案內的相關內容為何?
  2. (*) 設定Cookie的說明: 在 IE 瀏覽器可以經由「工具/網際網路選項/隱私」的下拉式選單來修改瀏覽器對於 cookie 的接受程度,但是此選單的選項眾多,稍嫌複雜。請從網路上尋找資料,撰寫一個網頁 cookieOptions.htm,以圖文並茂的方式,說明這些和 cookie 相關選項的功能。(請務必說明你的 IE 版本和微軟視窗作業系統版本。)
  3. (*) 記錄載入時間: 請寫一個網頁,可以顯示使用者上次點選此網頁的時間,且 Cookie 有效期間為一年。(提示:使用 onLoad。)
  4. (**) 記錄載入及停留時間: 請寫一個網頁,可以顯示使用者上次點選此網頁的時間,以及上次停留在此網頁的時間長短,且 Cookie 有效期間為一年。(提示:使用 onLoad 及 onBeforeUnload。)
  5. (*) 讀寫Cookie以確認可用: 請寫一個網頁,偵測用戶端是否有開啟 Cookie 功能(請勿使用 navigator.cookieEnabled),若無開啟,以警告視窗提示使用者要開啟 Cookie 功能,此網頁才能正常運作。(提示:在 JavaScript 中寫入一個 Cookie,再測試看看是否能正常讀出此 Cookie。)
  6. (**) 不同目錄下的Cookie共用: 不同的 HTML 文件,在同一個伺服器、不同的目錄下,如何共用 Cookie?請用你寫的網頁來舉實例說明。(此題必須從網路找相關資料。)
  7. (**) 讀寫Cookie以確認其長度限制: 根據很久以前的官方資料,Cookie 有下列限制:
    • 一個 Cookie 檔案最多只能包含 300 個 cookies。(這只適用於 Netscape,因為它把所有的 Cookie 都放在一個檔案。)
    • 每一個 Cookie 的大小不得超過 4KB。
    • 每一個 URL 路徑,最多只能設定 20 個 cookie。
    但是這些官方資料可能已經過時了,而且瀏覽器的版本一再更新,因此要知道 cookie 的限制,最可靠的做法就是寫程式碼來測試。
    1. 一個 Cooke 在長度超過多少時會被切斷?請用一個測試網頁來說明。(提示:在 JavaScript 中使用迴圈來寫入一個 cookie 的大量資料,再由 JavaScript 將 cookie 讀出,看看資料量多大時,cookie 會被切掉。)
    2. 一個網頁最多能寫入幾個 cookie?請用一個測試網頁來說明。(提示:在 JavaScript 中使用 for-loop 來寫入多個 cookie ,再由 JavaScript 將 cookie 讀出,若達到 Cookie 個數的上限,寫入動作就沒有作用。)
    (請注意:使用 IIS 伺服器和其它伺服器(如UNIX 上的 Apache 伺服器)可能得到不一樣的結果,因為 IIS 伺服器會保留一些無法刪除的 Cookie 在用戶端,所以同樣的網頁在不同的伺服器可能得到不同的答案。)
  8. (**) Cookie簡單應用: 寫一個網頁,滿足下列需求:
    拜訪次數網頁顯示訊息
    第 1 次拜訪 您好!歡迎您首度光臨本站!
    請填入您的大名,謝謝!
    貴姓大名:
    第 2 次拜訪 XXX,您好!歡迎您再度光臨本站!
    您上次光臨時間:xxxxxxxxxx
    (若我猜錯您的大名,請重填,謝謝!)
    貴姓大名:
    .
    .
    .
    .
    .
    .
    第 n 次拜訪
    (n>2)
    XXX,您好!歡迎您 n 度光臨本站!
    您上次光臨時間:xxxxxxxxxx
    (若我猜錯您的大名,請重填,謝謝!)
    貴姓大名:
  9. (***) 模擬IE的「自動完成」功能: 本作業將利用 cookie 模擬 IE 的「自動完成」功能。換句話說,當使用者在文字欄位輸入資料時,網頁會將資料存入 cookie 中,當下次使用者再次輸入資料,便可啟用類似自動完成的功能。首先我們先在網頁上設計四個控制項:
    1. 當使用者第一次在 text 裡面打入 "aircop" 時,在按「儲存」後,網頁會把 "aircop" 存入 cookie 中,並同時加入下拉式選單的 option 中,當下次這個網頁又被載入時,下拉式選單中的 option 會由 cookie 裡面存的資料來產生。比如第二次又打入了 "erison",然後按「儲存」。下次再到這個網頁時,下拉式選單裡的 option 裡就會有 "aircop" 及 "erison" 這兩個字串。當使用者企圖在 text 裡輸入 "e" 時,下拉式選單就會自動 select 到 "erison" 這個字串,此時只要使用者按下「自動完成」,就可自動將 "erison" 填入 text 中。自動完成的尋找規則是從第一個字元開始,找第一個符合的字串。(相關參考網頁:動態下拉式選單,dynamicListBox01.htm
    2. 下拉式選單中的 option 必須經過排序,而且能對付各種奇怪符號。

JavaScript 程式設計與應用:用於網頁用戶端